<?php

namespace app\index\model;

use Think\Db;
use think\Model;

class Login extends Model{

    function login(){
        $input = input();
        if(!$this->validate(true)->validateData($input)){
            //validate(true) 意识是去加载名字相同的校验器  名字不相同的 你可以在true写校验规则的名字 如：$rule
            throw new \Exception($this->getError());
        }
        $dbData = $this->getByLogin($input['login']);
        //getBy动态查询是一个魔术方法,可以根据某个字段名称动态得到对应的一条数据记录
        if(empty($dbData)){
            throw new \Exception('账号不存在！');
        }
        if($dbData['pwd']!=$input['pwd']){
            throw new \Exception('密码错误！');
        }
//        return db('user')->find($dbData['id']);
//        // find() 方法是和 select() 用法类似的一个方法，不同之处 find() 查询出来的始终只有一条数据，即系统自动加上了 LIMIT 1 限制。
        return User::get($dbData['id']);
    }

    function  getAccessUrls($roleId){
        $rows = Db::query('SELECT path FROM useable JOIN access ON useable.id = access.useable_id WHERE role_id=?',[$roleId]);
        $urls = [];
        foreach ($rows as $row){
            $urls[$row['path']]=true;
        }
        return $urls;
    }
    function getMenuData($roleId){
        $rows = Db::query('SELECT id,title,path,pid FROM useable JOIN access ON useable.id = access.useable_id WHERE role_id=? AND visible=\'y\'',[$roleId]);
        $tmps = [[]];
        foreach ($rows as &$row){
            $tmps[$row['id']]= &$row ;
            unset($row['id']);
        }
        foreach ($rows as &$row){
            $tmps[$row['pid']]['children'][]= &$row ;
            unset($row['pid']);
        }
        return $tmps[0]['children'];
    }
}
